﻿/**
@file SpriteCore.h
@author onlytest
@brief SpriteCore核心类的实现将底层DX函数与引擎的函数分离
@version 0.002
*/
#ifndef SPRITECORE_H
#define SPRITECORE_H
#include "SpriteGe.h"
/**
@namespace Sprite
@brief 引擎的主要名字空间
*/
namespace Sprite
{	
	/**
	@brief SpriteCore类主要实现引擎实现过程中的流程顺序
	*/

	class SpriteCore
	{
	public:
		
		/**
		@brief 为全局参数进行初始化
		@return 传回初始化的结果
		*/
		HRESULT init();
		/**
		@brief 运行过程传输信息
		@return 信息的值
		*/
		int run();
		/**
		@brief ~SpriteCore为析构函数		
		*/
		virtual ~SpriteCore(void);

		/**
		@brief updateScene更新场景中的数据
		@param dt每帧之间刷新的时间
		*/
		virtual void updateScene(float dt);
		
		/**
		@brief drawScene绘制场景
		*/
		virtual void drawScene();
		
		/**
		@brief mainMsgProc
		@param  msg 传输的信息
		@param  wParam
		@param LPARAM lParam
		@return   
		*/
		virtual LRESULT CoreMsgProc(UINT msg,WPARAM wParam,LPARAM lParam);
		
		/**
		@brief Instance得到当前引擎核心实例
		@return   SpriteCore*格式的指针
		*/
		static SpriteCore* Instance();
		
		/**
		@brief CreateInstace建立实例
		@param hInstace输入程序实例
		*/
		static SpriteCore* CreateInstace(HINSTANCE hInstace);

		
		/**
		@brief CreateInstace建立实例
		@param HINSTANCE hInstace传入的当前实例句柄
		@param int width 屏幕宽度
		@param int height	屏幕高度
		@param std::string title	标题名称
		*/
		static SpriteCore* CreateInstace(HINSTANCE hInstace,int width,int height,std::wstring title);
	
	protected:	
		/**
		@brief SpriteCore的构造函数
		@param HINSTACE hInstace 传入的当前实例句柄
		*/
		SpriteCore(HINSTANCE hInstace);
		/**
		@brief SpriteCore的构造函数
		@param HINSTANCE hInstace传入的当前实例句柄
		@param int width 屏幕宽度
		@param int height	屏幕高度
		@param std::string title	标题名称
		*/
		SpriteCore(HINSTANCE hInstace,int width,int height,std::wstring title);
		/**
		@brief 初始化D3D
		@return   返回是否成功
		*/
		HRESULT initD3D();
		/**
		@brief 初始化窗口
		@return   是否成功创建
		*/
		HRESULT iniWindows();
		///类的单例
		static SpriteCore* m_pCCore;
		//屏幕宽度
		int m_nWidth;
		//屏幕高度
		int m_nHeight;	
		//程序标题
	//	std::wstring m_strTitle;
		///程序实例
		HINSTANCE m_hInstance;	
		///窗口句柄
		HWND	m_HMainWnd;	
		///主窗口类
		SpriteWindows * m_pCMainWindow;
		///D3D初始化类
//		SpriteD3D * SpriteD3d;		
		///时间类
		SpriteTimer * m_pCMainTimer;
		///摄像头
		SpriteCamera* m_pCMainCamera;
	};
}
#endif


